#ifndef __STEPMOTOR_H
#define __STEPMOTOR_H

#include "stm32f4xx.h"


//使用二号电机时将PA2和PD14短接
/* 电机状态枚举 */
typedef enum {
    STEPMOTOR_IDLE,       // 电机空闲
    STEPMOTOR_RUNNING,    // 电机运行中
    STEPMOTOR_PAUSED      // 电机暂停
} StepMotorState_t;

/* 电机配置结构体 */
typedef struct {
    TIM_TypeDef* tim;            // 定时器
    uint16_t step_pin;           // STEP引脚
    GPIO_TypeDef* step_port;     // STEP端口
    uint16_t dir_pin;            // DIR引脚
    GPIO_TypeDef* dir_port;      // DIR端口
    uint32_t frequency;          // 当前频率(Hz)
    uint32_t max_freq;           // 最大频率
    int32_t remaining_steps;     // 剩余步数
    StepMotorState_t state;      // 电机状态
} StepMotor_t;

/* 全局电机实例 */
extern StepMotor_t StepMotor1;
extern StepMotor_t StepMotor2;

/* 函数接口 */
void StepMotor_Init(StepMotor_t* stepmotor);                // 初始化电机
void StepMotor_SetDirection(StepMotor_t* stepmotor, uint8_t dir); // 设置方向
void StepMotor_SetFrequency(StepMotor_t* stepmotor, uint32_t freq); // 设置频率
void StepMotor_MoveSteps(StepMotor_t* stepmotor, int32_t steps); // 移动指定步数
void StepMotor_Stop(StepMotor_t* stepmotor);                // 停止电机
void StepMotor_Pause(StepMotor_t* stepmotor);               // 暂停电机
void StepMotor_Resume(StepMotor_t* stepmotor);              // 恢复电机
StepMotorState_t StepMotor_GetState(StepMotor_t* stepmotor); // 获取电机状态
int32_t StepMotor_GetRemainingSteps(StepMotor_t* stepmotor); // 获取剩余步数

/* 中断处理函数 */
void TIM4_IRQHandler(void);
void TIM5_IRQHandler(void);

#endif
